home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Tech Arsenal 1
/
Tech Arsenal (Arsenal Computer).ISO
/
tek-01
/
snip1292.zip
/
PRNSPOOL.C
< prev
next >
Wrap
C/C++ Source or Header
|
1992-12-26
|
3KB
|
154 lines
/* prnspool.c 12-22-91 Robert Mashlan, public domain */
/* DOS print spooler interface functions */
#include <stdio.h>
#include <dos.h>
int printspool_errno = 0;
char *printspool_errlist[] = {
"No error",
"Function Invalid",
"File not found",
"Path not found",
"Too many open files",
"Access denied",
"",
"",
"Queue full",
"Spooler busy",
"",
"",
"Name too long",
"",
"Drive invalid"
};
/* returns -1 if printspooler installed */
/* 0 otherwise */
int printspool_installed(void)
{
union REGS r;
r.x.ax = 0x0100;
int86(0x2f, &r, &r);
if(r.h.al==0xff)
{
printspool_errno=0;
return -1;
}
else
{
printspool_errno=1;
return 0;
}
}
/* submits a file name to be printed */
/* returns error code */
int printspool_submit( const char *pathname )
{
struct {
unsigned char level;
char far *pathname;
} packet;
union REGS r;
struct SREGS s;
packet.level = 0;
packet.pathname = (char far *)pathname;
s.ds = FP_SEG(&packet);
r.x.dx = FP_OFF(&packet);
r.x.ax = 0x0101;
int86x(0x2f, &r, &r, &s);
if(!r.x.cflag)
return printspool_errno = 0;
else return printspool_errno = r.x.ax;
}
/* removes a file from the print queue */
int printspool_remove( const char far *fname )
{
union REGS r;
struct SREGS s;
s.ds = FP_SEG(fname);
r.x.dx = FP_OFF(fname);
r.x.ax = 0x0102;
int86x(0x2f, &r, &r, &s);
if(!r.x.cflag)
return printspool_errno = 0;
else return printspool_errno=r.x.ax;
}
/* cancels all files in the print queue */
int printspool_cancel(void)
{
union REGS r;
r.x.ax = 0x0103;
int86(0x2f, &r, &r);
if(!r.x.cflag)
return printspool_errno = 0;
else return printspool_errno = r.x.ax;
}
/* ends hold state after a call to printspool_qetqueue */
/* or printspool_errorcount */
void printspool_endhold(void)
{
union REGS r;
r.x.ax = 0x0105;
int86(0x2f, &r, &r);
}
/* returns a far pointer to the printspooler queue, */
/* an array of 64 char asciiz strings */
char far *printspool_getqueue(void)
{
char far *result;
union REGS r;
struct SREGS s;
r.x.ax = 0x0104;
int86x(0x2f, &r, &r, &s);
result = MK_FP(s.ds,r.x.si);
if (!r.x.cflag)
{
printspool_errno = 0;
return result;
}
else
{
printspool_errno = r.x.ax;
return NULL;
}
}
/* returns the error count from the printspooler */
int printspool_errorcount(void)
{
union REGS r;
r.x.ax = 0x0104;
int86(0x2f, &r, &r);
if (!r.x.cflag)
{
printspool_errno = 0;
return r.x.dx; /* return the number of errors */
}
else
{
printspool_errno = r.x.ax;
return r.x.dx;
}
}